package 系统复习.面试题.区间集合;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 实数集合可以表示为若干不相交区间的并集，其中每个区间的形式为 [a, b)（左闭右开），
 * 表示满足 a <= x < b 的所有实数  x 的集合。如果某个区间 [a, b) 中包含实数 x ，则称实数 x 在集合中。
 * 给你一个 有序的 不相交区间列表 intervals 。intervals 表示一个实数集合，
 * 其中每一项 intervals[i] = [ai, bi] 都表示一个区间 [ai, bi) 。再给你一个要删除的区间 toBeRemoved 。
 * 返回 一组实数，该实数表示intervals 中 删除 了 toBeRemoved 的部分 。
 * 换句话说，返回实数集合，并满足集合中的每个实数 x 都在 intervals 中，但不在 toBeRemoved 中。
 * 你的答案应该是一个如上所述的 有序的 不相连的间隔列表 。
 *
 *
 */
public class L1272 {

    public List<List<Integer>> removeInterval(int[][] intervals, int[] toBeRemoved) {
        List<List<Integer>> result = new ArrayList<>();
        for (int[] interval : intervals) {
            // 如果没有重叠，则按原样将间隔添加到列表中。
            if (interval[0] > toBeRemoved[1] || interval[1] < toBeRemoved[0]) {
                result.add(Arrays.asList(interval[0], interval[1]));
            } else {
                // 需要保留左区间吗？
                if (interval[0] < toBeRemoved[0]) {
                    result.add(Arrays.asList(interval[0], toBeRemoved[0]));
                }
                // 需要保留右区间吗？
                if (interval[1] > toBeRemoved[1]) {
                    result.add(Arrays.asList(toBeRemoved[1], interval[1]));
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {

    }
}
